The present invention relates, in general, to the field of computer systems and methods for implementing the same. More particularly, the present invention relates to a system and method for providing dynamic references between services in a computer system.
Computer systems including business systems, entertainment systems, and personal communication systems are increasingly implemented as distributed software systems. These systems ate alternatively referred to as “enterprise networks” and “enterprise computing systems”. These systems include application code and data that are distributed among a variety of data structures, data processor systems, storage devices and physical locations. They are intended to serve a geographically diverse and mobile set of users. This environment is complicated because system users move about the distributed system, using different software applications to access and process data, different hardware to perform their work, and often different physical locations to work from. These trends create a difficult problem in providing a secure yet consistent environment for the users.
In general, distributed computing systems must scale well. This means that the system architecture desirably adapts to more users, more applications, more data, and more geographical distribution of the users, applications, and data. The cost in money and time to switch over a network architecture that is adapted to a smaller business to one suited for a larger business is often prohibitive.
A conventional computing system uses a client/server model implemented on a local area network (“LAN”). In such systems powerful server computers (e.g., application servers and file servers) are used to process and access data. The requested data is then transmitted to the client computer for further processing. To scale to larger networks, multiple LANs may be inter-networked using, for example, leased data lines to create a wide area network (“WAN”). The equipment required to implement a WAN is expensive and difficult to administer. Also, as networks become larger to include multiple LANs and multiple servers on each LAN it becomes increasingly difficult to find resources (i.e., files, applications, and users) on any one of the LANs.
As computing power continues to become less expensive, clients tend to process and store their own data, using the server primarily as file servers for sharing data with other client computers. However, software applications are increasingly implemented as distributed applications in which parts of the application code reside on different computers. An example of this is a conventional world wide web browser program in which various “plug-in” components are provided after program installation to perform specific tasks. Another example is the Java™ programming environment in which applications or “applets” are downloaded dynamically for execution on a client machine. Hence, even though client machines are increasingly used to execute program code, there is an increasing need to know the location of network resources from which code can be obtained.
Peer-to-peer type networks are an evolutionary change to client/server systems. In a peer-to-peer network each computer on the LAN/WAN can act as a server for applications or data stored on that machine. A peer-to-peer network does not require, but is able to, run alongside a client/server system. Peer-to-peer architectures offer a potential of reduced complexity by eliminating the server and efficient use of resources available in modern client and workstation class computers. However, peer-to-peer networks remain dependent on a secure, closed network connection to implement the LAN/WAN which is difficult to scale upwardly. Peer-to-peer solutions also do not scale well because as the network becomes larger it becomes increasingly difficult to identify which peer contains the applications and data needed by another peer. A need exists for a system and method that enables a peer-to-peer architecture to scale without reduced performance, ease of use, and security.
Another complicating influence is that networks are becoming increasingly heterogeneous on many fronts. Network users, software, hardware, and geographic boundaries are continuously changing and becoming more varied. For example, a single computer may have multiple users, each of which work more efficiently if the computer is configured to meet their needs. Conversely, a single user may access a network using multiple devices such as a workstation, a mobile computer, a handheld computer, or a data appliance such as a cellular phone or the like. A user may, for example, use a full featured e-mail application to access e-mail while working from a workstation but prefer a more compact application to access the same data when using a handheld computer or cellular phone. In each case, the network desirably adapts to the changed conditions with minimal user intervention.
In order to support and enterprise computing system, the client/server or peer-to-peer network had to provide a standard mechanism to establish data communication links between software applications on the same computer or other computers in a distributed system. There is increasing interest in remote access systems that enable a user to access a LAN/WAN using a public, generally insecure, communication channels such as the Internet. Further, there is interest in enabling LANs to be inter-networked using public communication channels. In an enterprise system it is critical that these distributed resources remain available. A disabled, slow, or unreliable link to a distributed resource can affect performance of the entire system. However, to make a reliable connection, an application must first discover to location an entry points of the resource it needs to use. Accordingly, the need for a mechanism and system to dynamically make connections to distributed services is needed.
From a network user's perspective these limitations boil down to a need automatically and dynamically gain a reference to a service running on the network without a need for the user to manually locate the service instance on the network. Further, a need exists for a mechanism to automatically identify the entry points of a service on the network without requiring the user to have a priori knowledge of the network service's interface parameters. What is needed is a system that readily adapts to a changing, heterogeneous needs of a distributed network computing environment.
One solution to the problem of finding resources in a distributed system is to use directories. Directories are data structures that hold information such as mail address book information, printer locations, public key infrastructure (“PKI”) information, and the like. Meta-directories are a solution that provides directory integration to unify and centrally manage disparate directories within an enterprise. However, directory and meta-directory solutions only help to catalog information that is already known and do not provide a mechanism for automatically discovering the identity and interface parameters for a network service.
In such a distributed computing environment, it has heretofore been extremely difficult for an application program running on a given service (e.g. a client computer in a local environment) to locate and use a needed service (e.g. on a remotely located server computer) without having to embed all of the logic in the application necessary for finding the service or negotiating for a given version of the service that is ultimately desired.